"""
Pytest configuration and shared fixtures for document analysis tests.

This module provides common fixtures and configuration for all tests
in the document analysis test suite.
"""

import pytest
import tempfile
import shutil
from pathlib import Path
from typing import Dict, Any


@pytest.fixture
def temp_dir():
    """Create a temporary directory for test files."""
    temp_path = tempfile.mkdtemp()
    yield Path(temp_path)
    shutil.rmtree(temp_path)


@pytest.fixture
def sample_markdown_content():
    """Sample markdown content for testing."""
    return """# 测试文档规格

## 功能概述

这是一个测试文档，用于验证文档分析功能。

### 用户故事1：文档清晰度评估

作为用户，我希望能够评估文档的清晰度，以便了解文档质量。

#### 验收标准

- 系统应该能够分析文档内容
- 系统应该提供清晰度评分
- 系统应该识别模糊的描述

### 技术要求

系统需要支持中文文档分析。

#### 非功能性需求

- 性能：分析时间应该少于30秒
- 内存：内存使用应该少于500MB

## 实现细节

待实现...
"""


@pytest.fixture
def sample_document_file(temp_dir, sample_markdown_content):
    """Create a sample markdown document file for testing."""
    doc_path = temp_dir / "test_document.md"
    doc_path.write_text(sample_markdown_content, encoding='utf-8')
    return doc_path


@pytest.fixture
def ambiguous_document_content():
    """Content with ambiguous descriptions for testing."""
    return """# 项目规格

## 功能需求

系统应该能够处理一些数据，提供相应的输出。

### 性能要求

系统应该具有较好的性能，能够支持多个用户。

### 技术实现

可能需要使用相关的技术来实现必要的功能。

## 其他要求

系统应该能够适当地处理各种情况，提供合适的结果。
"""


@pytest.fixture
def ambiguous_document_file(temp_dir, ambiguous_document_content):
    """Create a document with ambiguous content for testing."""
    doc_path = temp_dir / "ambiguous_document.md"
    doc_path.write_text(ambiguous_document_content, encoding='utf-8')
    return doc_path


@pytest.fixture
def expected_analysis_result():
    """Expected analysis result structure for validation."""
    return {
        "document": {
            "word_count": 10,
            "paragraph_count": 3,
            "heading_count": 2
        },
        "clarity_score": {
            "overall": 70.0,
            "readability": 80.0,
            "completeness": 60.0,
            "consistency": 75.0,
            "specificity": 65.0,
            "structure": 80.0
        },
        "metrics": {
            "total_sentences": 5,
            "avg_sentence_length": 12.0,
            "ambiguous_phrases_count": 2,
            "missing_sections_count": 1
        }
    }


@pytest.fixture
def mock_config():
    """Mock configuration for testing."""
    return {
        "analysis": {
            "default_language": "zh",
            "cache_enabled": True,
            "max_file_size_mb": 50,
            "timeout_seconds": 30
        },
        "output": {
            "default_format": "html",
            "include_metrics": True,
            "include_suggestions": True
        },
        "performance": {
            "max_concurrent_analyses": 4,
            "memory_limit_mb": 400
        }
    }